﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FrbaHotel.Clases;
using System.Data.SqlClient;
using System.Drawing;
using System.Windows.Forms;


namespace FrbaHotel.ClasesDb
{
    public class ClienteDb
    {
        //devuelve todos los clientes
        public static  List<ClaseCliente> ObtenerClientes()
        {
            //Inicialiazo lista de clientes vacio   
            List<ClaseCliente> ListaClientes = new List<ClaseCliente>();

            using (SqlConnection Conn = ConexionDb.obtenerConexion())
            {
                //Realizo el command y el reader para obtener todos los 
                //registros de la tabla clientes
                SqlCommand comandCli = new SqlCommand(string.Format("SELECT ID_Cliente,Mail,Persona,Habilitado,Nacionalidad FROM [WE_MISS_THE_GARBAGE_COLLECTOR].Cliente"),Conn);
                SqlDataReader reader = comandCli.ExecuteReader();
                
                //Cargo los datos en la clase cliente
                while (reader.Read())
                {
                    ClaseCliente cli = new ClaseCliente();
                    cli.IdCliente = (int)reader.GetDecimal(0);
                    cli.Mail = reader.GetString(1);
                    cli.IdPersona = (int)reader.GetDecimal(2);
                    cli.Habilitado = reader.GetBoolean(3);
                    cli.Nacionalidad = reader.GetString(4);

                    

                    ListaClientes.Add(cli);
                
                }

                reader.Close();

                //Este command y reader es para seleccionar todos los registros de
                //la tabla Persona
                SqlCommand comandPer = new SqlCommand(string.Format("SELECT ID_Persona,Nombre,Apellido,Tipo_documento,Nro_documento,Telefono,Direccion,Fecha_Nac FROM [WE_MISS_THE_GARBAGE_COLLECTOR].Persona"), Conn);
                SqlDataReader readerP = comandPer.ExecuteReader();

                int i = 0;
                
                while (readerP.Read())
                {
                    if(readerP["Nombre"] != "admin")
                    {
                    ListaClientes[i].IdPersona = (int)readerP.GetDecimal(0);
                    ListaClientes[i].Nombre = Convert.ToString(readerP["Nombre"]);
                    ListaClientes[i].Apellido = readerP.GetString(2);
                    ListaClientes[i].TipoDoc = readerP.GetString(3);
                    ListaClientes[i].NumeroDoc = (int)readerP.GetDecimal(4);
                    if (readerP["Telefono"] != DBNull.Value)
                    {
                        ListaClientes[i].Telefono = (int)readerP.GetDecimal(5);
                    }
                    ListaClientes[i].Direccion = readerP.GetString(6);
                    ListaClientes[i].FechaNac = Convert.ToString(readerP.GetDateTime(7));

                    i++;
                        }
                }

                Conn.Close();
                return ListaClientes;
            }
        }

        //Ejecutar un nuevo Cliente y Persona en la DB
        public static void insertarCliente(ClaseCliente cli)
        {
            using (SqlConnection Conn = ConexionDb.obtenerConexion())
            {
                //Inicializo idPersona 
                int idPersona;
                //Creo el comand para recuperar el proximo idPersona
                SqlCommand com = new SqlCommand(string.Format("SELECT TOP 1 * FROM [WE_MISS_THE_GARBAGE_COLLECTOR].Persona ORDER BY ID_Persona DESC"),Conn);
                //Recupero el ultimo idPersona y le sumo 1
                idPersona = int.Parse(string.Format("{0}", com.ExecuteScalar())) + 1;
                //Command para insertar una Persona
                SqlCommand comandPersona = new SqlCommand(string.Format("INSERT INTO [WE_MISS_THE_GARBAGE_COLLECTOR].Persona(ID_Persona,Nombre,Apellido,Tipo_Documento,Nro_Documento,Telefono,Direccion,Fecha_Nac)VALUES('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}')",idPersona,cli.Nombre,cli.Apellido,cli.TipoDoc,cli.NumeroDoc,cli.Telefono,cli.Direccion,cli.FechaNac),Conn);
                comandPersona.ExecuteNonQuery();
                
                //Command para insertar un Cliente
                SqlCommand Comando = new SqlCommand(string.Format("INSERT INTO [WE_MISS_THE_GARBAGE_COLLECTOR].Cliente(Mail,Persona,Habilitado,Nacionalidad)VALUES('{0}','{1}','{2}','{3}')", cli.Mail,idPersona,true,cli.Nacionalidad), Conn);
                Comando.ExecuteNonQuery();

                //Mensaje de datos correctos
                MessageBox.Show("Datos guardados correctamente", "Datos guardado", MessageBoxButtons.OK, MessageBoxIcon.Information);

                Conn.Close();
            }
            
            
        }

        public static void obtenerCliente()
        { 
           
        }

        //Modificar alumno
        /*public static int ModificarAlumno(ClaseCliente cli)
        {
            using (SqlConnection Conn = ConexionDb.obtenerConexion())
            { 
                SqlCommand com = new SqlCommand(string.Format("UPDATE [WE_MISS_THE_GARBAGE_COLLECTOR].Cliente 
            }
        }*/

    }
}
